iT邦幫忙

2022 iThome 鐵人賽

DAY 27
0

前言

比起暸解 Istio 還有什麼進階功能,大家應該更迫切想知道如何把 Istio 跟目前團隊的 DevOps 流程相結合。這幾篇會介紹 Argo CD 這個熱門的 DevOps 工具,並且藉由實作了解如何透過此工具將 Istio 融合到 DevOps 流水線。

Istio 幫忙 DevOps 什麼地方?

https://ithelp.ithome.com.tw/upload/images/20221006/20139235mjXtDcnnYq.png

DevOps 協助開發者和維運人員合作之間能夠更順利,而作法就是將軟體開發週期分為多個階段,並使用自動化工具加速整個開發過程。

開發團隊計畫好了開始實作,完成後透過 CI/CD 工具走過 BuildTestReleaseDeploy Pipeline,最後交由維運團隊來運行,而 Istio 就能幫助維運人員的 OperateMonitior 部分,例如提供各種路由配置、可視化介面等等。

現在問題是 CI/CD 工具如何與 Istio 相結合,從而實現整個 DevOps 流水線呢?可以從交付給維運人員的 Deploy Pipeline 下手,而本篇要介紹的 Argo CD 就是個強大的 CD 工具,使用後就能輕鬆的完成 Deploy 任務。

Argo CD 介紹

https://ithelp.ithome.com.tw/upload/images/20221006/201392352zUHdpygL4.png

Argo CDCNCF 的開源專案,是一種在 Kubernetes 實現 GitOps 的 CD 工具,Argo CD 能夠檢查儲存在 Git Repo 的 Kubernetes 部署檔案,例如 Yaml 檔、Helm 等等,並將其部署到 Kubernetes 中,若使用者需對 Kubernetes 進行更動(Ex: 版本更新、元件增添),只需將更動內容 Commit 到 Repo , Argo CD 就會幫忙自動更新 Kubernetes 的環境。

而 Argo CD 要如何結合 Istio?除了能夠將 Istio 所需的 Virtual Service、Destination Rule 及 Gateway 透過 GitOps 的方式管理,還能藉由 Argo Rollouts 功能幫助我們自動化實現 Canary DeploymentBlue/Green Deployment 等部署策略,將 Deploy 與 Operate Pipeline 連接起來,從而實現完整的 DevOps 流水線。

去年鐵人賽筆者也有寫一篇使用 Argo CD 部署應用程式的教學,有興趣可以從 Day21 - ArgoCD 介紹及安裝 開始看起

在 Minikube 安裝 Argo CD

在開始學習如何使用 Argo CD 前,要先將其安裝到我們的實驗環境,安裝方式參考 Argo CD getting started,下面紀錄了筆者在 Minikube 安裝 Argo CD 的流程。

  1. 建立 argocd Namespace 並部署 Argo CD 應用程式
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
  1. 查看 Argo CD 運行狀況
kubectl get pods -n argocd

(輸出結果)

NAME                                                READY   STATUS    RESTARTS   AGE
argocd-application-controller-0                     1/1     Running   0          23m
argocd-applicationset-controller-6b4b7969b8-wzckz   1/1     Running   0          23m
argocd-dex-server-6445d44bd9-5ldbs                  1/1     Running   0          23m
argocd-notifications-controller-98464fc99-sjcbs     1/1     Running   0          23m
argocd-redis-5dff748d9c-2vml6                       1/1     Running   0          23m
argocd-repo-server-7778dffc44-29drj                 1/1     Running   0          23m
argocd-server-5f687c8b99-27n4v                      1/1     Running   0          23m

等到所有 Pod 都為 Running 就完成 Argo CD 的部署了

部署完 Argo CD 後,要怎麼連接到 UI 介面,除了可以設置 Ingress 之外,也能使用 LoadBalancer Service,這裡我們使用相對簡單的後者。

  1. 將 argo-server Service 的 Type 設成 LoadBalancer,使其接收 EXTERNAL-IP
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
  1. 查看 Argo CD Service 狀態
kubectl get svc argocd-server -n argocd

(輸出結果)

NAME          TYPE         CLUSTER-IP    EXTERNAL-IP PORT(S)                      AGE
argocd-server LoadBalancer 10.101.165.30 <pending>   80:30735/TCP,443:32482/TCP   25m

Day15 的 Gateway 介紹中有提到,若要讓 Minikube 內部 Services 取得 External-IP,可以使用 Minikube Tunnel 功能將 IP 分發給 LoadBalancer Services。

  1. 新開一個 Terminal,執行 Minikube Tunnel
minikube tunnel

(輸出結果)

Status:
	machine: minikube
	pid: 652382
	route: 10.96.0.0/12 -> 192.168.49.2
	minikube: Running
	services: [argocd-server, istio-ingressgateway]
    errors:
		minikube: no errors
		router: no errors
		loadbalancer emulator: no errors

Logs 中可看到有 Minikube Tunnel 設置了 Route 讓我們可以連接到 argocd-server

  1. 查看 Argo CD Service 是否有 EXTERNAL-IP
kubectl get svc argocd-server -n argocd

(輸出結果)

NAME          TYPE         CLUSTER-IP    EXTERNAL-IP   PORT(S)                      AGE
argocd-server LoadBalancer 10.101.165.30 10.101.165.30 80:30735/TCP,443:32482/TCP   27m

在 EXTERNAL-IP 欄位即可取得 argocd-server 的 IP

  1. 獲取預設密碼,並複製輸出
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo

(輸出結果)

qDdOTiyvwNMMlzrE
  1. 在瀏覽器輸入以下網址,並使用下列資料登入 Argo CD
  • Username: admin
  • Password: 剛剛複製的密碼
https://<ARGOCD_SERVER_EXTERNAL-IP>

https://ithelp.ithome.com.tw/upload/images/20221006/20139235BMpOtlVWzB.png

登入之後即可看到 Argo CD UI 介面。

https://ithelp.ithome.com.tw/upload/images/20221006/20139235ntf1EmFuSa.png

總結

本篇介紹了 Argo CD 能幫助我們將 DevOps 流水線中的 Deploy 與 Operate 接合起來,至於要如何實現,下一篇就會介紹其中的關鍵功能:Argo Rollouts。


上一篇
Day26 - 學習 Istio 之路,還有哪些 Tasks 還沒完成
下一篇
Day28 - 使用 Argo Rollouts 結合 GitOps 與部署策略
系列文
學會 Kubernetes 然後呢?由 Istio 進入 DevOps 偉大航路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言